package persistencia;

import java.util.HashSet;
import java.util.Set;

import unq.equipos.dom.Equipo;
import unq.equipos.dom.Habilidad;
import unq.equipos.dom.HabilidadImpl;
import unq.equipos.dom.Jugador;
import unq.equipos.dom.Posicion;
import unq.equipos.dom.Tecnico;

public class EquipoBuilder {
	private Tecnico tecnico;
	private Set<Jugador> jugadores;
	private String nombre;
	
	public EquipoBuilder withTecnico(Tecnico tecnico){
		this.setTecnico(tecnico);
		return this;
	}
	
	public EquipoBuilder withJugadores(Set<Jugador> jugadores){
		this.setJugadores(jugadores);
		return this;
	}
	
	public EquipoBuilder withNombre(String nombre){
		this.setNombre(nombre);
		return this;
	}
	
	public Equipo build(){
		Equipo toReturn = new Equipo();
		toReturn.setNombre(this.getNombre());
		toReturn.setTecnico(this.getTecnico());
		toReturn.setJugadores(this.getJugadores());
		return toReturn;
	}
	
	//setters && getters
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNombre() {
		return nombre;
	}

	public void setJugadores(Set<Jugador> jugadores) {
		this.jugadores = jugadores;
	}

	public Set<Jugador> getJugadores() {
		return jugadores;
	}

	public void setTecnico(Tecnico tecnico) {
		this.tecnico = tecnico;
	}

	public Tecnico getTecnico() {
		return tecnico;
	}
	
	
	
	
	//premade
	public Equipo mkNormalTeam(String nombreEquipo, Tecnico tecnico){
		Habilidad habilidadJugador1, habilidadJugador2, habilidadJugador3,
		habilidadJugador4, habilidadJugador5, habilidadJugador6,
		habilidadJugador7, habilidadJugador8, habilidadJugador9,
		habilidadJugador10, habilidadJugador11, habilidadJugador12;
		
		Jugador jugador1, jugador2, jugador3, jugador4, jugador5, jugador6,
		jugador7, jugador8, jugador9, jugador10, jugador11, jugador12;
		
		
		EquipoBuilder builder = new EquipoBuilder();
		Set<Jugador> listaJugadores = new HashSet<Jugador>();
		
		habilidadJugador1 = new HabilidadImpl(Posicion.Lateral, 5);
		habilidadJugador2 = new HabilidadImpl(Posicion.Arquero, 1);
		habilidadJugador3 = new HabilidadImpl(Posicion.Lateral, 9);
		habilidadJugador4 = new HabilidadImpl(Posicion.Lateral, 9);
		habilidadJugador5 = new HabilidadImpl(Posicion.Central, 9);
		habilidadJugador6 = new HabilidadImpl(Posicion.Central, 9);
		habilidadJugador7 = new HabilidadImpl(Posicion.VolanteDefensivo, 9);
		habilidadJugador8 = new HabilidadImpl(Posicion.VolanteLateral, 9);
		habilidadJugador9 = new HabilidadImpl(Posicion.VolanteLateral, 9);
		habilidadJugador10 = new HabilidadImpl(Posicion.Enganche, 9);
		habilidadJugador11 = new HabilidadImpl(Posicion.Delantero, 9);
		habilidadJugador12 = new HabilidadImpl(Posicion.MediaPunta, 9);

		jugador1 = new Jugador("0");
		jugador1.agregarHabilidad(habilidadJugador1);
		jugador2 = new Jugador("a");
		jugador2.agregarHabilidad(habilidadJugador2);
		jugador3 = new Jugador("b");
		jugador3.agregarHabilidad(habilidadJugador3);
		jugador4 = new Jugador("c");
		jugador4.agregarHabilidad(habilidadJugador4);
		jugador5 = new Jugador("d");
		jugador5.agregarHabilidad(habilidadJugador5);
		jugador6 = new Jugador("e");
		jugador6.agregarHabilidad(habilidadJugador6);
		jugador7 = new Jugador("f");
		jugador7.agregarHabilidad(habilidadJugador7);
		jugador8 = new Jugador("g");
		jugador8.agregarHabilidad(habilidadJugador8);
		jugador9 = new Jugador("h");
		jugador9.agregarHabilidad(habilidadJugador9);
		jugador10 = new Jugador("i");
		jugador10.agregarHabilidad(habilidadJugador10);
		jugador11 = new Jugador("j");
		jugador11.agregarHabilidad(habilidadJugador11);
		jugador12 = new Jugador("k");
		jugador12.agregarHabilidad(habilidadJugador12);
		
		listaJugadores.add(jugador1);
		listaJugadores.add(jugador2);
		listaJugadores.add(jugador3);
		listaJugadores.add(jugador4);
		listaJugadores.add(jugador5);
		listaJugadores.add(jugador6);
		listaJugadores.add(jugador7);
		listaJugadores.add(jugador8);
		listaJugadores.add(jugador9);
		listaJugadores.add(jugador10);
		listaJugadores.add(jugador11);
		listaJugadores.add(jugador12);
		
		return builder.withNombre(nombreEquipo).withTecnico(tecnico).withJugadores(listaJugadores).build();
	}
	
	public Equipo mkBigTeam(String nombreEquipo, Tecnico tecnico){
		Habilidad habilidadJugador1, habilidadJugador2, habilidadJugador3,
		habilidadJugador4, habilidadJugador5, habilidadJugador6,
		habilidadJugador7, habilidadJugador8, habilidadJugador9,
		habilidadJugador10, habilidadJugador11, habilidadJugador12,
		habilidadJugador13, habilidadJugador14, habilidadJugador15,
		habilidadJugador16, habilidadJugador17, habilidadJugador18,
		habilidadJugador19, habilidadJugador20;
		
		Jugador jugador1, jugador2, jugador3, jugador4, jugador5, jugador6,
		jugador7, jugador8, jugador9, jugador10, jugador11, jugador12,
		jugador13, jugador14, jugador15, jugador16, jugador17, jugador18,
		jugador19, jugador20;
		
		
		EquipoBuilder builder = new EquipoBuilder();
		Set<Jugador> listaJugadores = new HashSet<Jugador>();
		
		habilidadJugador1 = new HabilidadImpl(Posicion.Lateral, 5);
		habilidadJugador2 = new HabilidadImpl(Posicion.Arquero, 1);
		habilidadJugador3 = new HabilidadImpl(Posicion.Lateral, 9);
		habilidadJugador4 = new HabilidadImpl(Posicion.Lateral, 9);
		habilidadJugador5 = new HabilidadImpl(Posicion.Central, 9);
		habilidadJugador6 = new HabilidadImpl(Posicion.Central, 9);
		habilidadJugador7 = new HabilidadImpl(Posicion.VolanteDefensivo, 9);
		habilidadJugador8 = new HabilidadImpl(Posicion.VolanteLateral, 9);
		habilidadJugador9 = new HabilidadImpl(Posicion.VolanteLateral, 9);
		habilidadJugador10 = new HabilidadImpl(Posicion.Enganche, 5);
		habilidadJugador11 = new HabilidadImpl(Posicion.Delantero, 7);
		habilidadJugador12 = new HabilidadImpl(Posicion.MediaPunta, 3);
		habilidadJugador13 = new HabilidadImpl(Posicion.Central, 5);
		habilidadJugador14 = new HabilidadImpl(Posicion.VolanteLateral, 4);
		habilidadJugador15 = new HabilidadImpl(Posicion.VolanteDefensivo, 1);
		habilidadJugador16 = new HabilidadImpl(Posicion.Arquero, 5);
		habilidadJugador17 = new HabilidadImpl(Posicion.Lateral, 5);
		habilidadJugador18 = new HabilidadImpl(Posicion.Central, 6);
		habilidadJugador19 = new HabilidadImpl(Posicion.Enganche, 7);
		habilidadJugador20 = new HabilidadImpl(Posicion.MediaPunta, 10);

		jugador1 = new Jugador("0'");
		jugador1.agregarHabilidad(habilidadJugador1);
		jugador2 = new Jugador("a'");
		jugador2.agregarHabilidad(habilidadJugador2);
		jugador3 = new Jugador("b'");
		jugador3.agregarHabilidad(habilidadJugador3);
		jugador4 = new Jugador("c'");
		jugador4.agregarHabilidad(habilidadJugador4);
		jugador5 = new Jugador("d'");
		jugador5.agregarHabilidad(habilidadJugador5);
		jugador6 = new Jugador("e'");
		jugador6.agregarHabilidad(habilidadJugador6);
		jugador7 = new Jugador("f'");
		jugador7.agregarHabilidad(habilidadJugador7);
		jugador8 = new Jugador("g'");
		jugador8.agregarHabilidad(habilidadJugador8);
		jugador9 = new Jugador("h'");
		jugador9.agregarHabilidad(habilidadJugador9);
		jugador10 = new Jugador("i'");
		jugador10.agregarHabilidad(habilidadJugador10);
		jugador11 = new Jugador("j'");
		jugador11.agregarHabilidad(habilidadJugador11);
		jugador12 = new Jugador("k'");
		jugador12.agregarHabilidad(habilidadJugador12);
		jugador13 = new Jugador("l'");
		jugador13.agregarHabilidad(habilidadJugador13);
		jugador14 = new Jugador("m'");
		jugador14.agregarHabilidad(habilidadJugador14);
		jugador15 = new Jugador("n'");
		jugador15.agregarHabilidad(habilidadJugador15);
		jugador16 = new Jugador("o'");
		jugador16.agregarHabilidad(habilidadJugador16);
		jugador17 = new Jugador("p'");
		jugador17.agregarHabilidad(habilidadJugador17);
		jugador18 = new Jugador("q'");
		jugador18.agregarHabilidad(habilidadJugador18);
		jugador19 = new Jugador("r'");
		jugador19.agregarHabilidad(habilidadJugador19);
		jugador20 = new Jugador("el GROSSO");
		jugador20.agregarHabilidad(habilidadJugador20);
		
		listaJugadores.add(jugador1);
		listaJugadores.add(jugador2);
		listaJugadores.add(jugador3);
		listaJugadores.add(jugador4);
		listaJugadores.add(jugador5);
		listaJugadores.add(jugador6);
		listaJugadores.add(jugador7);
		listaJugadores.add(jugador8);
		listaJugadores.add(jugador9);
		listaJugadores.add(jugador10);
		listaJugadores.add(jugador11);
		listaJugadores.add(jugador12);
		
		return builder.withNombre(nombreEquipo).withTecnico(tecnico).withJugadores(listaJugadores).build();
	}
}